/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Attributes.h.zapt

#pragma once

#include <app/ConcreteAttributePath.h>
#include <app/data-model/DecodableList.h>
#include <app/data-model/List.h>
#include <app/data-model/Nullable.h>
#include <app/util/basic-types.h>
#include <lib/core/TLV.h>
#include <lib/support/BitMask.h>

#include <clusters/shared/Attributes.h>
#include <clusters/shared/Enums.h>
#include <clusters/shared/Structs.h>

#include <clusters/CameraAvStreamManagement/AttributeIds.h>
#include <clusters/CameraAvStreamManagement/ClusterId.h>
#include <clusters/CameraAvStreamManagement/Enums.h>
#include <clusters/CameraAvStreamManagement/Structs.h>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace CameraAvStreamManagement
		{
			namespace Attributes
			{

				namespace MaxConcurrentEncoders
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxConcurrentEncoders::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxConcurrentEncoders
				namespace MaxEncodedPixelRate
				{
					struct TypeInfo {
						using Type = uint32_t;
						using DecodableType = uint32_t;
						using DecodableArgType = uint32_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxEncodedPixelRate::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxEncodedPixelRate
				namespace VideoSensorParams
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::CameraAvStreamManagement::Structs::
							VideoSensorParamsStruct::Type;
						using DecodableType = chip::app::Clusters::CameraAvStreamManagement::
							Structs::VideoSensorParamsStruct::DecodableType;
						using DecodableArgType =
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								VideoSensorParamsStruct::DecodableType &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::VideoSensorParams::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace VideoSensorParams
				namespace NightVisionUsesInfrared
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NightVisionUsesInfrared::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NightVisionUsesInfrared
				namespace MinViewportResolution
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::CameraAvStreamManagement::Structs::
							VideoResolutionStruct::Type;
						using DecodableType = chip::app::Clusters::CameraAvStreamManagement::
							Structs::VideoResolutionStruct::DecodableType;
						using DecodableArgType =
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								VideoResolutionStruct::DecodableType &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MinViewportResolution::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MinViewportResolution
				namespace RateDistortionTradeOffPoints
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								RateDistortionTradeOffPointsStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								RateDistortionTradeOffPointsStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								RateDistortionTradeOffPointsStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::RateDistortionTradeOffPoints::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace RateDistortionTradeOffPoints
				namespace MaxContentBufferSize
				{
					struct TypeInfo {
						using Type = uint32_t;
						using DecodableType = uint32_t;
						using DecodableArgType = uint32_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxContentBufferSize::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxContentBufferSize
				namespace MicrophoneCapabilities
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::CameraAvStreamManagement::Structs::
							AudioCapabilitiesStruct::Type;
						using DecodableType = chip::app::Clusters::CameraAvStreamManagement::
							Structs::AudioCapabilitiesStruct::DecodableType;
						using DecodableArgType =
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								AudioCapabilitiesStruct::DecodableType &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MicrophoneCapabilities::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MicrophoneCapabilities
				namespace SpeakerCapabilities
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::CameraAvStreamManagement::Structs::
							AudioCapabilitiesStruct::Type;
						using DecodableType = chip::app::Clusters::CameraAvStreamManagement::
							Structs::AudioCapabilitiesStruct::DecodableType;
						using DecodableArgType =
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								AudioCapabilitiesStruct::DecodableType &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SpeakerCapabilities::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SpeakerCapabilities
				namespace TwoWayTalkSupport
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::CameraAvStreamManagement::
							TwoWayTalkSupportTypeEnum;
						using DecodableType = chip::app::Clusters::CameraAvStreamManagement::
							TwoWayTalkSupportTypeEnum;
						using DecodableArgType = chip::app::Clusters::CameraAvStreamManagement::
							TwoWayTalkSupportTypeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::TwoWayTalkSupport::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace TwoWayTalkSupport
				namespace SnapshotCapabilities
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								SnapshotCapabilitiesStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								SnapshotCapabilitiesStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								SnapshotCapabilitiesStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SnapshotCapabilities::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SnapshotCapabilities
				namespace MaxNetworkBandwidth
				{
					struct TypeInfo {
						using Type = uint32_t;
						using DecodableType = uint32_t;
						using DecodableArgType = uint32_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MaxNetworkBandwidth::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MaxNetworkBandwidth
				namespace CurrentFrameRate
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CurrentFrameRate::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CurrentFrameRate
				namespace HDRModeEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::HDRModeEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace HDRModeEnabled
				namespace SupportedStreamUsages
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::Globals::StreamUsageEnum>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Globals::StreamUsageEnum>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Globals::StreamUsageEnum> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SupportedStreamUsages::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SupportedStreamUsages
				namespace AllocatedVideoStreams
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								VideoStreamStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								VideoStreamStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								VideoStreamStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AllocatedVideoStreams::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AllocatedVideoStreams
				namespace AllocatedAudioStreams
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								AudioStreamStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								AudioStreamStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								AudioStreamStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AllocatedAudioStreams::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AllocatedAudioStreams
				namespace AllocatedSnapshotStreams
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::CameraAvStreamManagement::Structs::
								SnapshotStreamStruct::Type>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								SnapshotStreamStruct::DecodableType>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::CameraAvStreamManagement::Structs::
								SnapshotStreamStruct::DecodableType> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::AllocatedSnapshotStreams::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace AllocatedSnapshotStreams
				namespace StreamUsagePriorities
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::List<
							const chip::app::Clusters::Globals::StreamUsageEnum>;
						using DecodableType = chip::app::DataModel::DecodableList<
							chip::app::Clusters::Globals::StreamUsageEnum>;
						using DecodableArgType = const chip::app::DataModel::DecodableList<
							chip::app::Clusters::Globals::StreamUsageEnum> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::StreamUsagePriorities::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace StreamUsagePriorities
				namespace SoftRecordingPrivacyModeEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SoftRecordingPrivacyModeEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SoftRecordingPrivacyModeEnabled
				namespace SoftLivestreamPrivacyModeEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SoftLivestreamPrivacyModeEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SoftLivestreamPrivacyModeEnabled
				namespace HardPrivacyModeOn
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::HardPrivacyModeOn::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace HardPrivacyModeOn
				namespace NightVision
				{
					struct TypeInfo {
						using Type =
							chip::app::Clusters::CameraAvStreamManagement::TriStateAutoEnum;
						using DecodableType =
							chip::app::Clusters::CameraAvStreamManagement::TriStateAutoEnum;
						using DecodableArgType =
							chip::app::Clusters::CameraAvStreamManagement::TriStateAutoEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NightVision::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NightVision
				namespace NightVisionIllum
				{
					struct TypeInfo {
						using Type =
							chip::app::Clusters::CameraAvStreamManagement::TriStateAutoEnum;
						using DecodableType =
							chip::app::Clusters::CameraAvStreamManagement::TriStateAutoEnum;
						using DecodableArgType =
							chip::app::Clusters::CameraAvStreamManagement::TriStateAutoEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NightVisionIllum::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NightVisionIllum
				namespace Viewport
				{
					struct TypeInfo {
						using Type =
							chip::app::Clusters::Globals::Structs::ViewportStruct::Type;
						using DecodableType = chip::app::Clusters::Globals::Structs::
							ViewportStruct::DecodableType;
						using DecodableArgType = const chip::app::Clusters::Globals::Structs::
							ViewportStruct::DecodableType &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Viewport::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Viewport
				namespace SpeakerMuted
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SpeakerMuted::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SpeakerMuted
				namespace SpeakerVolumeLevel
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SpeakerVolumeLevel::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SpeakerVolumeLevel
				namespace SpeakerMaxLevel
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SpeakerMaxLevel::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SpeakerMaxLevel
				namespace SpeakerMinLevel
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::SpeakerMinLevel::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace SpeakerMinLevel
				namespace MicrophoneMuted
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MicrophoneMuted::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MicrophoneMuted
				namespace MicrophoneVolumeLevel
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MicrophoneVolumeLevel::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MicrophoneVolumeLevel
				namespace MicrophoneMaxLevel
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MicrophoneMaxLevel::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MicrophoneMaxLevel
				namespace MicrophoneMinLevel
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MicrophoneMinLevel::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MicrophoneMinLevel
				namespace MicrophoneAGCEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::MicrophoneAGCEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace MicrophoneAGCEnabled
				namespace ImageRotation
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ImageRotation::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ImageRotation
				namespace ImageFlipHorizontal
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ImageFlipHorizontal::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ImageFlipHorizontal
				namespace ImageFlipVertical
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ImageFlipVertical::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ImageFlipVertical
				namespace LocalVideoRecordingEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::LocalVideoRecordingEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace LocalVideoRecordingEnabled
				namespace LocalSnapshotRecordingEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::LocalSnapshotRecordingEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace LocalSnapshotRecordingEnabled
				namespace StatusLightEnabled
				{
					struct TypeInfo {
						using Type = bool;
						using DecodableType = bool;
						using DecodableArgType = bool;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::StatusLightEnabled::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace StatusLightEnabled
				namespace StatusLightBrightness
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::Globals::ThreeLevelAutoEnum;
						using DecodableType = chip::app::Clusters::Globals::ThreeLevelAutoEnum;
						using DecodableArgType =
							chip::app::Clusters::Globals::ThreeLevelAutoEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::StatusLightBrightness::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace StatusLightBrightness
				namespace GeneratedCommandList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::GeneratedCommandList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
					};
				} // namespace GeneratedCommandList
				namespace AcceptedCommandList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::AcceptedCommandList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
					};
				} // namespace AcceptedCommandList
				namespace AttributeList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::AttributeList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
					};
				} // namespace AttributeList
				namespace FeatureMap
				{
					struct TypeInfo : public Clusters::Globals::Attributes::FeatureMap::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
					};
				} // namespace FeatureMap
				namespace ClusterRevision
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::ClusterRevision::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}
					};
				} // namespace ClusterRevision

				struct TypeInfo {
					struct DecodableType {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::CameraAvStreamManagement::Id;
						}

						CHIP_ERROR Decode(TLV::TLVReader &reader,
								  const ConcreteAttributePath &path);

						Attributes::MaxConcurrentEncoders::TypeInfo::DecodableType
							maxConcurrentEncoders = static_cast<uint8_t>(0);
						Attributes::MaxEncodedPixelRate::TypeInfo::DecodableType
							maxEncodedPixelRate = static_cast<uint32_t>(0);
						Attributes::VideoSensorParams::TypeInfo::DecodableType videoSensorParams;
						Attributes::NightVisionUsesInfrared::TypeInfo::DecodableType
							nightVisionUsesInfrared = static_cast<bool>(0);
						Attributes::MinViewportResolution::TypeInfo::DecodableType
							minViewportResolution;
						Attributes::RateDistortionTradeOffPoints::TypeInfo::DecodableType
							rateDistortionTradeOffPoints;
						Attributes::MaxContentBufferSize::TypeInfo::DecodableType
							maxContentBufferSize = static_cast<uint32_t>(0);
						Attributes::MicrophoneCapabilities::TypeInfo::DecodableType
							microphoneCapabilities;
						Attributes::SpeakerCapabilities::TypeInfo::DecodableType
							speakerCapabilities;
						Attributes::TwoWayTalkSupport::TypeInfo::DecodableType twoWayTalkSupport =
							static_cast<chip::app::Clusters::CameraAvStreamManagement::
									    TwoWayTalkSupportTypeEnum>(0);
						Attributes::SnapshotCapabilities::TypeInfo::DecodableType
							snapshotCapabilities;
						Attributes::MaxNetworkBandwidth::TypeInfo::DecodableType
							maxNetworkBandwidth = static_cast<uint32_t>(0);
						Attributes::CurrentFrameRate::TypeInfo::DecodableType currentFrameRate =
							static_cast<uint16_t>(0);
						Attributes::HDRModeEnabled::TypeInfo::DecodableType HDRModeEnabled =
							static_cast<bool>(0);
						Attributes::SupportedStreamUsages::TypeInfo::DecodableType
							supportedStreamUsages;
						Attributes::AllocatedVideoStreams::TypeInfo::DecodableType
							allocatedVideoStreams;
						Attributes::AllocatedAudioStreams::TypeInfo::DecodableType
							allocatedAudioStreams;
						Attributes::AllocatedSnapshotStreams::TypeInfo::DecodableType
							allocatedSnapshotStreams;
						Attributes::StreamUsagePriorities::TypeInfo::DecodableType
							streamUsagePriorities;
						Attributes::SoftRecordingPrivacyModeEnabled::TypeInfo::DecodableType
							softRecordingPrivacyModeEnabled = static_cast<bool>(0);
						Attributes::SoftLivestreamPrivacyModeEnabled::TypeInfo::DecodableType
							softLivestreamPrivacyModeEnabled = static_cast<bool>(0);
						Attributes::HardPrivacyModeOn::TypeInfo::DecodableType
							hardPrivacyModeOn = static_cast<bool>(0);
						Attributes::NightVision::TypeInfo::DecodableType nightVision =
							static_cast<chip::app::Clusters::CameraAvStreamManagement::
									    TriStateAutoEnum>(0);
						Attributes::NightVisionIllum::TypeInfo::DecodableType nightVisionIllum =
							static_cast<chip::app::Clusters::CameraAvStreamManagement::
									    TriStateAutoEnum>(0);
						Attributes::Viewport::TypeInfo::DecodableType viewport;
						Attributes::SpeakerMuted::TypeInfo::DecodableType speakerMuted =
							static_cast<bool>(0);
						Attributes::SpeakerVolumeLevel::TypeInfo::DecodableType
							speakerVolumeLevel = static_cast<uint8_t>(0);
						Attributes::SpeakerMaxLevel::TypeInfo::DecodableType speakerMaxLevel =
							static_cast<uint8_t>(0);
						Attributes::SpeakerMinLevel::TypeInfo::DecodableType speakerMinLevel =
							static_cast<uint8_t>(0);
						Attributes::MicrophoneMuted::TypeInfo::DecodableType microphoneMuted =
							static_cast<bool>(0);
						Attributes::MicrophoneVolumeLevel::TypeInfo::DecodableType
							microphoneVolumeLevel = static_cast<uint8_t>(0);
						Attributes::MicrophoneMaxLevel::TypeInfo::DecodableType
							microphoneMaxLevel = static_cast<uint8_t>(0);
						Attributes::MicrophoneMinLevel::TypeInfo::DecodableType
							microphoneMinLevel = static_cast<uint8_t>(0);
						Attributes::MicrophoneAGCEnabled::TypeInfo::DecodableType
							microphoneAGCEnabled = static_cast<bool>(0);
						Attributes::ImageRotation::TypeInfo::DecodableType imageRotation =
							static_cast<uint16_t>(0);
						Attributes::ImageFlipHorizontal::TypeInfo::DecodableType
							imageFlipHorizontal = static_cast<bool>(0);
						Attributes::ImageFlipVertical::TypeInfo::DecodableType
							imageFlipVertical = static_cast<bool>(0);
						Attributes::LocalVideoRecordingEnabled::TypeInfo::DecodableType
							localVideoRecordingEnabled = static_cast<bool>(0);
						Attributes::LocalSnapshotRecordingEnabled::TypeInfo::DecodableType
							localSnapshotRecordingEnabled = static_cast<bool>(0);
						Attributes::StatusLightEnabled::TypeInfo::DecodableType
							statusLightEnabled = static_cast<bool>(0);
						Attributes::StatusLightBrightness::TypeInfo::DecodableType
							statusLightBrightness = static_cast<
								chip::app::Clusters::Globals::ThreeLevelAutoEnum>(0);
						Attributes::GeneratedCommandList::TypeInfo::DecodableType
							generatedCommandList;
						Attributes::AcceptedCommandList::TypeInfo::DecodableType
							acceptedCommandList;
						Attributes::AttributeList::TypeInfo::DecodableType attributeList;
						Attributes::FeatureMap::TypeInfo::DecodableType featureMap =
							static_cast<uint32_t>(0);
						Attributes::ClusterRevision::TypeInfo::DecodableType clusterRevision =
							static_cast<uint16_t>(0);
					};
				};
			} // namespace Attributes
		} // namespace CameraAvStreamManagement
	} // namespace Clusters
} // namespace app
} // namespace chip
